package dp.findSubstringInWraproundString;
/**
 * @Date 2020/04/30
 * @author 王光浩
 * @Thinking 以26给字母中每一个字母为结尾的最长子串之和就是结果
 * @Analysis 时间复杂度O（n），空间复杂度O（1）
 */
public class MyMethodTwo {
	 public int findSubstringInWraproundString(String p) {
		 if( p==null || p.length()==0 ) return 0;
		 int[] helper = new int[26];
		 //计算以每一个字母结尾的最长子串长度
		 helper[p.charAt(0)-'a']=1;
		 int pre = 1;
		 for( int i=1 ; i<p.length() ; i++ ) {
			 char first = p.charAt(i-1);
			 char second = p.charAt(i);
			 if( (first=='a' && second=='z') || (first=='z' && second=='a') || second-first==1 ) {
				 pre++;				 
			 }
			 else 
				 pre = 1;
			 helper[second-'a'] = helper[second-'a']>pre? helper[second-'a']:pre;
		 }
		 //获取最终结果
		 int sum = 0;
		 for( int i=0 ; i<26 ; i++ ) {
			 sum += helper[i];
		 }
		 return sum;
	 }
}
